/*******************************************************************************
				spell: program to correct spanish special characters
********************************************************************************/	
cap program drop spell
program define spell
	syntax [varlist], [Clean(varlist) Up(varlist)]
	qui foreach var of varlist `varlist' {
		replace `var' = subinstr(`var', "Á", "A", .)
		replace `var' = subinstr(`var', "á", "a", .)
		replace `var' = subinstr(`var', "É", "E", .)			
		replace `var' = subinstr(`var', "é", "e", .)						
		replace `var' = subinstr(`var', "Í", "I", .)			
		replace `var' = subinstr(`var', "í", "i", .)						
		replace `var' = subinstr(`var', "Ó", "O", .)			
		replace `var' = subinstr(`var', "ó", "o", .)						
		replace `var' = subinstr(`var', "Ú", "U", .)			
		replace `var' = subinstr(`var', "ú", "u", .)
		replace `var' = subinstr(`var', "ñ", "n", .)
		replace `var' = subinstr(`var', "Ñ", "N", .)		

		replace `var' = subinstr(`var', "À", "A", .)						
		replace `var' = subinstr(`var', "à", "A", .)
		replace `var' = subinstr(`var', "È", "E", .)			
		replace `var' = subinstr(`var', "è", "e", .)						
		replace `var' = subinstr(`var', "Ì", "I", .)			
		replace `var' = subinstr(`var', "ì", "i", .)						
		replace `var' = subinstr(`var', "Ò", "O", .)			
		replace `var' = subinstr(`var', "ò", "o", .)						
		replace `var' = subinstr(`var', "Ù", "U", .)			
		replace `var' = subinstr(`var', "ù", "u", .)		
		replace `var' = subinstr(`var', "Ä", "A", .)									
		replace `var' = subinstr(`var', "ä", "a", .)						
		replace `var' = subinstr(`var', "Ë", "E", .)									
		replace `var' = subinstr(`var', "ë", "e", .)						
		replace `var' = subinstr(`var', "Ï", "I", .)						
		replace `var' = subinstr(`var', "ï", "i", .)									
		replace `var' = subinstr(`var', "Ö", "O", .)									
		replace `var' = subinstr(`var', "ö", "o", .)						
		replace `var' = subinstr(`var', "Ü", "U", .)						
		replace `var' = subinstr(`var', "ü", "u", .)												
		
		replace `var' = trim(itrim(`var'))
	}
		
	qui if "`clean'" != "" {
		foreach i in `clean' {
			tempvar auxiliar
			egen `auxiliar' = sieve(`i'), keep(a s)
			replace `i' = `auxiliar'
			replace `i' = trim(itrim(`i'))
		}
	}
	
	qui if "`up'" != "" {
		foreach j in `up' {
			replace `j' = upper(`j')
		}	
	}
	
end
	